3.1.2 Actions
- Listing 3.1 Action mapping at the most basic level (page40)
- 환경설정을 할때 기본적으로 action name과 action class를 설정해야 한다.
- result type이 없으면 , default result type을 실행한다.
<!DOCTYPE xwork PUBLIC "-//OpenSymphony Group//XWork 1.0//EN" "http://www.opensymphony.com/xwork/xwork-1.0.dtd">
<xwork>
<package name="default">
<action name="login" class="org.hibernate.auction.web.actions.users.Login" />
</package>
</xwork>
- Listing 3.2 Login action with two result mappings (page41)
- webwork-default.xml 파일을 include 하였다.
- default interceptor로 defalutStack를 지정하였다. defalutStack은 webwork-default.xml에 정의되어 있음
- Login action에서 반환되는 값이 input인지 success인지에 따라서 서로 다르게 처리한다.
<!DOCTYPE xwork PUBLIC "-//OpenSymphony Group//XWork 1.0//EN" "http://www.opensymphony.com/xwork/xwork-1.0.dtd">
<xwork>
<include name="webwork-default.xml"/>
<package name="default" extends="webwork-default">
<default-interceptor-ref name="defaultStack"/>
<action name="login" class="org.hibernate.auction.web.actions.users.Login">
<result name="input">login.jsp</result>
<result name="success" type="redirect">/secure/dashboard.action</result>
</action>
</package>
</xwork>
Aliasing actions (page42)
- 하나의 액션클래스에 여러 별칭들을 적용하여 사용할 수 있음
- 동일한 액션 클래스에 mehtod를 지정하여 서로 다른메소드를 호출 할 수 있다.
- mehtod를 지정하지 않으면 execute() 메소드가 호출된다.
- Listing 3.3 Search action class aliased twice with different configurations
- search 액션 요청시 execute() 메소드 실행
- moreResults 액션 요청시moreResults() 메소드 실행
<action name="search" class="org.hibernate.auction.web.actions.Search">
<interceptor-ref name="default"/>
<interceptor-ref name="execAndWait"/>
<result name="wait">search-wait.jsp</result>
<result name="success" type="redirect">moreResults.action</result>
</action>
<action name="moreResults" class="org.hibernate.auction.web.actions.Search" method="moreResults">
<result name="success">search.jsp</result>
</action>
public class Search extends ActionSupport implements ItemDAOAware, SessionAware {
public static final String RESULTS = "__search_results";
List items;
String query;
int page = 1;
int pages;
ItemDAO itemDAO;
Map session;
public String execute() throws Exception {
List results = itemDAO.search(query);
session.put(RESULTS, results);
cutPage(results);
return SUCCESS;
}
public String moreResults() throws Exception {
List results = (List) session.get(RESULTS);
cutPage(results);
return SUCCESS;
}
}
Aliasing without configuration (page44)
- action uri에 메소드명을 붙여서 환경설정을 하나만 하고 여러개의 메소드를 호출 할 수 있다.
- name!method.action 이와 같이 사용할 수 있음 (name은 action이름, method는 메소드 명)
- search.action 요청시 execute()가 실행 된다.
- search!moreResults.action 요청시 moreResults() 메소드가 실행된다
Customizing actions with parameters(page44)
- param을 설정하여 Action에 파라미터를 전달할 수 있다.
- 아래 예제는 WebServiceAction에 url, timeout 값이 파라미터로 전달됨
<action name="service" class="com.example.WebServiceAction">
<result name="success">/success.jsp</result>
<param name="url">http://somesite.com/service.wsdl</param>
<param name="timeout">30</param>
</action>
public class WebServiceAction {
private String url;
private long timeout;
public void setUrl(String url) {
this.url = url;
}
public void setTimeout(long timeout) {
this.timeout = timeout;
}
public String execute() {
// perform task here
}
}
문서에 대하여